package com.mark.web.data.enums;

import java.util.ArrayList;
import java.util.List;

/**
 * @Description: 用户模块的枚举类
 * @Author: Mark
 * @CreateDate: 2018/3/24.
 * @Version: 2.0
 * @Copyright : 豆浆油条个人非正式工作室
 */
public enum UserStateEnum {

    /****当前用户状态标识的枚举
     *
     * ERROR ：不可用，被拉黑
     * SUCCESS ：可以正常使用的用户
     * NEED_LOGIN ：需要登录
     * ILLEGAL_ARGUMENT ：
     **/
    ERROR(0,"用户状态不可用"),
    SUCCESS(1,"用户状态可用"),
    NEED_LOGIN(10,"NEED_LOGIN"),
    ILLEGAL_ARGUMENT(2,"ILLEGAL_ARGUMENT"),
    CURRENT_USER(3,"currentUser"),


    /*****************用户身份的枚举
     *
     * ROLE_CUSTOMER ：普通用户
     * SELLER_CUSTOMER ：店家
     ***/
    ROLE_CUSTOMER(1),
    SELLER_CUSTOMER(2),


    /****定义需要校验唯一性属性的枚举值
     *
     * USERNAME : 用户名
     * EMAIL ： 邮箱
     * PHONE ： 电话
     * */
    USERNAME("username"),
    EMAIL("email"),
    PHONE("phone");

    private int state;
    private String stateInfo;
    private String type;
    private int role;

    UserStateEnum(int state, String stateInfo) {
        this.state = state;
        this.stateInfo = stateInfo;
    }
    UserStateEnum(String type) {
        this.type = type;
    }

    UserStateEnum(int role) {
        this.role = role;
    }

    /**
     * 依据传入的state返回相应的enum值
     */
    public static UserStateEnum stateOf(int state) {
        for (UserStateEnum stateEnum : values()) {
            if (stateEnum.getState() == state) {
                return stateEnum;
            }
        }
        return null;
    }

    public int getState() {
        return state;
    }

    public String getStateInfo() {
        return stateInfo;
    }

    public String getType() {
        return type;
    }

    public int getRole() {
        return role;
    }

    /**
     *获取枚举类中所有的需要校验的字段的值
     * @return 元素为用户名，邮箱，手机号的集合列表
     */
    public static List<String> getTypes(){
        List<String> types = new ArrayList<>();
        types.add(USERNAME.getType());
        types.add(EMAIL.getType());
        types.add(PHONE.getType());
        return types;
    }
}
